//ES6 之前设置默认值的方式
function log(x, y) {
    y = y || 'World';  // 设置 y 的默认值
    console.log(x, y);
}

log('Hello'); // Hello World
log('Hello', 'China'); // Hello China
log('Hello', ''); // Hello World

//ES6 设置默认值的方式
function log2(x, y = 'World') {
    console.log(x, y);
}
log2('Hello'); // Hello World
log2('Hello', 'China'); // Hello China
log2('Hello', ''); // Hello World


function add(...values) {
    let sum = 0;

    for (var val of values) {
        sum += val;
    }

    return sum;
}

console.log(add(2, 5, 3)); // 10


// 匿名函数中this 作用域
function foo() {
    setTimeout(() => {
        console.log('id:', this.id);
    }, 100);
}

var id = 21;

console.log(foo.call({ id: 42 }));  // 42


//箭头函数里面根本没有自己的this，而是引用外层的this。
function Timer() {
    this.s1 = 0;
    this.s2 = 0;
    // 箭头函数
    setInterval(() => this.s1++, 1000); //this绑定定义时所在的作用域（即Timer函数）
    // 普通函数
    setInterval(function () {
        this.s2++; //this 指向运行时所在的作用域（即全局对象）
    }, 1000);
}

var timer = new Timer();

setTimeout(() => console.log('s1: ', timer.s1), 3100); // 3
setTimeout(() => console.log('s2: ', timer.s2), 3100); // 0